function ValidatorInit(){
    
    $$('input[type=text]').each(function( ref ){
        if( ref.readAttribute('format') ) attachValidation( ref );
        if( ref.readAttribute('placeholder') ) attachPlaceHolder( ref );
    });

    $$('textarea').each(function( ref ){
        if( ref.readAttribute('format') ) attachValidation( ref );
        if( ref.readAttribute('placeholder') ) attachPlaceHolder( ref );
    });
    
    $$('form').each(function( ref ){
    	Event.observe(ref, 'submit', stripPlaceHolders, false);
    });
} Event.observe(window, 'load', ValidatorInit, false);

function attachValidation( ref ){
    ref.observe('keypress', function( e ) {
        if( e.charCode ) {
            var re = new RegExp( Event.element(e).readAttribute('format') );

            if( !re.exec(String.fromCharCode(e.charCode)) ){
                Event.stop(e);
            }else if( limit = Event.element(e).readAttribute('format').match(/\{(\d+),(\d+)\}/) ){
                var cl = Event.element(e).value.length +1;
                if( cl < parseInt(limit[1]) || cl > parseInt(limit[2]) ) Event.stop(e);
            }
        }
    });
}

function attachPlaceHolder( ref ){
	if( ref.value == '' ){
		ref.value = ref.readAttribute('placeholder');
		ref.addClassName('HasPlaceHolder');
	}
    ref.observe('focus', function( e ) {
    	if( ref.readAttribute('placeholder') == ref.value ){
    		ref.value = '';
    		ref.removeClassName('HasPlaceHolder');
    	}
    });
    ref.observe('blur', function( e ) {
    	if( ref.value == '' ){
    		ref.addClassName('HasPlaceHolder');
    		ref.value = ref.readAttribute('placeholder');
    	}
    });
}

function stripPlaceHolders(){
    $$('input[type=text]').each(function( ref ){
        if( ref.readAttribute('placeholder') == ref.value ) {
        	ref.value = '';
        	ref.removeClassName('HasPlaceHolder');
        }
    });

    $$('textarea').each(function( ref ){
        if( ref.readAttribute('placeholder') == ref.value ) {
        	ref.value = '';
        	ref.removeClassName('HasPlaceHolder');
        }
    });
}